<?php 
//返回数组json化后的json格式数据，
//这是个通用方法，ajax想要的数据就在这里。
function ejd($status='succ',$msg='',$href='',$data=array()){
	echo json_encode(array(			//PHP中数组JSON化的方法。
		'status'=>$status,
		'msg'=>$msg,
		'href'=>$href,
		'data'=>$data		
	));
	exit;
	
}

/*
 *     通过简洁的递归来完成无限分类。即以儿子紧跟父亲的排列顺序返回数组。
 *     参数：数组形式的表数据$list，从哪个级别开始遍历$pid，引用返回空数组&$t
 *     结果：返回按类排列的数组，并每条数据(数组元素)加入了两个新元素$v['step']：深度，$v['has_sub']：是否有儿子。
 */
function getCatTree($list, $pid = 0, &$t = array()){

	foreach ($list as $k=>$v){

		if($v['pid'] == $pid){
				
			$v['step'] = getCatDepth($list, $v['id']);

			$v['has_sub'] = hasCatSub($list, $v['id']);
				
			$t[] = $v;
			getCatTree($list,$v['id'],$t);
				
		}
	}

	return $t;

}
//返回类的深度即级别
function getCatDepth($list,$id,&$i=0){

	foreach ($list as $v){
		if($v['id'] == $id && $v['pid'] != 0){
			$i++;
			getCatDepth($list,$v['pid'],$i);
		}
	}

	return $i;

}

//返回布尔值：判断有无子类
function hasCatSub($list,$id){

	foreach ($list as $v){
		if($v['pid'] == $id){
			return true;
		}
	}

	return false;
}

/*再次封装
 * 取得类别选择框中的数据形式。形如三级类别：|__|__眼影盒。
* 全部类别以数组形式返回。'类别的id'=>'类别的title'
*/
function cat_select_tree($list){
	$tree_cat = getCatTree($list);
	$arr = array();

	foreach ($tree_cat as $k=>$v){
		$str_append = '';
		for($i=0;$i<$v['step'];$i++){
			$str_append .= '|__';
		}
		$arr[$v['id']] = $str_append.$v['title'];
	}
	return $arr;
}

/*
 * 1.获得该类的全名称，包含它的所有父类
 * 2.所需参数：包含全部类的数组；该类的id；连接符号。
 * 3.返回值：成功则返回1.；失败则返回'其它'。
 * */
function getCatFname($list,$id,$str_div = '&gt;'){
	$arr = getCatFnameArr($list, $id);

	foreach ($list as $k=>$v){
		if($v['id'] == $id) $arr[] = $v['title'];
	}

	$fname = implode($str_div,$arr);
	if(!empty($fname)) return $fname;
	return '其它';
}

function getCF($id,$str_div = '&gt;'){

	$Cat = D('WsCat');

	$list = $Cat->select();

	return getCatFname($list, $id,$str_div);
}

function getCatFnameArr($list,$id,&$t = array()){

	foreach ($list as $k=>$v){
		if($v['id'] == $id){
				
			$pid = $v['pid'];
				
			foreach ($list as $z=>$j){
				if($j['id'] == $pid){
					$t[] = $j['title'];
					getCatFnameArr($list, $j['id'],$t);
				}
			}

		}
	}

	return array_reverse($t);

}
//获得类（含子类）的所有id，组成数组。
function getCatSubId($list,$id,&$arr_sub_id= array()){

	foreach ($list as $k=>$v){

		if($v['pid'] == $id){
				
			$arr_sub_id[] = $v['id'];
			getCatSubId($list, $v['id'],$arr_sub_id);
				
		}

	}

	return array_merge(array($id),$arr_sub_id);

}

//上传文件的命名机制
function creat_file_rand_name(){
	$filename = '';
	$arr_mic = explode(' ', microtime());
	$ms = $arr_mic[0]*1000000;
	$filename = date('YmdHis').$ms;
	return $filename;
}

function print_date($time){
	echo date('Y-m-d H:i:s',$time);
	
}



function pr($arr){

	echo '<pre>';
	print_r($arr);
	exit;

}

function except($arr){
    $c = name_val('c');
    $m = name_val('m');
    foreach ($arr as $k=>$v){
        $t = explode('^', $v);
        if($c == $t[0] && $m == $t[1]){
            return true;
            break;
        } 
    }
    return false;
}

//取得地址栏中的c m参数
function get_c(){
    if(empty($_GET['c'])) return 'welcome';
    return $_GET['c'];
}
function get_m(){
    if(empty($_GET['m'])) return 'index';
    return $_GET['m'];
}

function append_str($ostr,$num=1,$str='---',$type='a'){
    $append_str = '';
    for ($i=0;$i<$num;$i++){
        $append_str .= $str;
    }
    
    if($type == 'a'){
        return $append_str.$ostr;
    }else{
        return $ostr.$append_str;
    } 
}

//三级菜单的父子连续排列(只收集了三个级别)：即儿子紧跟父亲
function there_level_menu($list){   
    $list_menu = array();
    foreach ($list as $k=>$v){                    //每次完成一个根菜单的搜索
        if($v->pid==0){
            $list_menu[] = $v;                     //以pid=0为根
            foreach ($list as $kk=>$vv){
                if($vv->pid == $v->id){            //看看$v有没有儿子
                    $list_menu[] = $vv;
                    foreach ($list as $kkk=>$vvv){
                        if($vvv->pid == $vv->id)         //再看看$vv有没有儿子
                            $list_menu[] = $vvv;
                    }
                }
            }
        }
    } 
    return $list_menu;   
}

//在$list_menu中判断$id数据有无儿子菜单
function have_sub_menu($list_menu,$id){
    foreach($list_menu as $k=>$v){
        if($v['pid'] == $id)
            return true;
    }
    return false;
}
